﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using TrabajoPractico1;
using BusquedasPrimeroAnchuraPrimeroProfundidad;
using System.Collections;

namespace BusquedasPrimeroAnchuraPrimeroProfundidad
{
    public partial class frmPrincipal : Form
    {

#region Declaración de variables

        //Los StringBuilder sirven para llenar el TextBox multilínea

        StringBuilder sbA = new StringBuilder();
        StringBuilder sbP = new StringBuilder();

        //arbolGenealogicoAnchura agA = new arbolGenealogicoAnchura();

#endregion

#region Constructor

        public frmPrincipal()
        {
            InitializeComponent();
            this.txtResultadosBusquedasA.Multiline = true;
            this.txtResultadosBusquedasP.Multiline = true;
        }

#endregion

#region Eventos 

        private void primeroEnAnchuraToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.buscarAnchura();
        }

        private void primeroEnProfundidadToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.buscarProfundidad();
            
        }

        private void btnBuscarAnchura_Click(object sender, EventArgs e)
        {
            
            this.buscarAnchura();
            
           
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            
            this.buscarProfundidad();
           
            
        }

        private void árbolGenealógicoToolStripMenuItem_Click(object sender, EventArgs e)
        {
            arbolGenealogico ag = new arbolGenealogico();
            ag.Show();
          
        }

        private void btnVerProfundidad_Click(object sender, EventArgs e)
        {
            arbolGenealogicoProfundidad ag = new arbolGenealogicoProfundidad();
            ag.dibujaArbolProfundidad(txtNombre.Text);
        }

        private void btnVerAnchura_Click(object sender, EventArgs e)
        {
            arbolGenealogicoAnchura ag = new arbolGenealogicoAnchura();
           
            ag.dibujaArbolAnchura(txtNombre.Text);

           

        }


        //private void button1_Click(object sender, EventArgs e)
        //{
        //    arbolGenealogicoAnchura ag = new arbolGenealogicoAnchura();
        //    agA.dibujaArbolAnchura(txtNombre.Text);

        //}

#endregion
        
#region Métodos 

        private void buscarProfundidad()
        {
            ArbolesBusquedas ab = new ArbolesBusquedas();
            ArrayList nv = new ArrayList();
            NodoArbol hijo = ab.busquedaProfundidad(txtNombre.Text);
            if (hijo != null)
            {
                string padre = hijo.Padre;
                sbP.Clear();
                sbP.AppendLine("El progenitor es: " + padre);
                sbP.AppendLine("\n");
                sbP.AppendLine("La cantidad de nodos visitados es: " + (ab.cantNodosVisitados(2)) + "\n\n");
                sbP.AppendLine("\n");
                //txtResultadosBusquedasP.Text = linea1 + "\r\n" + linea2;
                nv = ab.nodosVisitados(2);
                foreach (String n in nv)
                {
                    sbP.AppendLine("Nodo Recorrido: "+n);
                    //linea4 = n;
                    //txtResultadosBusquedasP.Text = linea3 + "\r\n" + linea4;

                }
                txtResultadosBusquedasP.Text += sbP.ToString();
            }
            else
            {
                sbP.Clear();
                sbP.AppendLine("El progenitor no pertenece al árbol de búsqueda");
                txtResultadosBusquedasP.Text += sbP.ToString();

            }
         
            
        }

        private void buscarAnchura()
        {
            ArbolesBusquedas ab = new ArbolesBusquedas();
            ArrayList nv = new ArrayList();
            NodoArbol hijo = ab.busquedaAnchura(txtNombre.Text);

            if (hijo != null)
            {
                string padre = hijo.Padre;
                sbA.Clear();
                sbA.AppendLine("El progenitor es: " + padre + "\n\n");
                sbA.AppendLine("\n");
                sbA.AppendLine("La cantidad de nodos visitados es: " + (ab.cantNodosVisitados(1)) + "\n\n");
                sbA.AppendLine("\n");
                //txtResultadosBusquedasA.Text = linea1 + "\r\n" + linea2;
                nv = ab.nodosVisitados(1);
                foreach (String n in nv)
                {
                    sbA.AppendLine("Nodo Recorrido: "+n);

                }
                txtResultadosBusquedasA.Text += sbA.ToString();
                

            }
            else
            {
                sbA.Clear();
                sbA.AppendLine("El progenitor no pertenece al árbol de búsqueda");
                txtResultadosBusquedasA.Text += sbA.ToString();
            }
        }

#endregion

        private void limpiarSolucionesToolStripMenuItem_Click(object sender, EventArgs e)
        {
            txtResultadosBusquedasA.Clear();
            txtResultadosBusquedasP.Clear();
            txtNombre.Clear();
            

        }


       
    }
}
